{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 250,
   "metadata": {},
   "outputs": [],
   "source": [
    "#导入必要的工具包\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.cluster import MiniBatchKMeans\n",
    "from sklearn import metrics\n",
    "\n",
    "from sklearn.decomposition import PCA\n",
    "import time\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "读取已筛选好的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 251,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>event_id</th>\n",
       "      <th>user_id</th>\n",
       "      <th>start_time</th>\n",
       "      <th>city</th>\n",
       "      <th>state</th>\n",
       "      <th>zip</th>\n",
       "      <th>country</th>\n",
       "      <th>lat</th>\n",
       "      <th>lng</th>\n",
       "      <th>c_1</th>\n",
       "      <th>...</th>\n",
       "      <th>c_92</th>\n",
       "      <th>c_93</th>\n",
       "      <th>c_94</th>\n",
       "      <th>c_95</th>\n",
       "      <th>c_96</th>\n",
       "      <th>c_97</th>\n",
       "      <th>c_98</th>\n",
       "      <th>c_99</th>\n",
       "      <th>c_100</th>\n",
       "      <th>c_other</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>684921758</td>\n",
       "      <td>3647864012</td>\n",
       "      <td>2012-10-31T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>244999119</td>\n",
       "      <td>3476440521</td>\n",
       "      <td>2012-11-03T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3928440935</td>\n",
       "      <td>517514445</td>\n",
       "      <td>2012-11-05T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2582345152</td>\n",
       "      <td>781585781</td>\n",
       "      <td>2012-10-30T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1051165850</td>\n",
       "      <td>1016098580</td>\n",
       "      <td>2012-09-27T00:00:00.001Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 110 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     event_id     user_id                start_time city state  zip country  \\\n",
       "0   684921758  3647864012  2012-10-31T00:00:00.001Z  NaN   NaN  NaN     NaN   \n",
       "1   244999119  3476440521  2012-11-03T00:00:00.001Z  NaN   NaN  NaN     NaN   \n",
       "2  3928440935   517514445  2012-11-05T00:00:00.001Z  NaN   NaN  NaN     NaN   \n",
       "3  2582345152   781585781  2012-10-30T00:00:00.001Z  NaN   NaN  NaN     NaN   \n",
       "4  1051165850  1016098580  2012-09-27T00:00:00.001Z  NaN   NaN  NaN     NaN   \n",
       "\n",
       "   lat  lng  c_1   ...     c_92  c_93  c_94  c_95  c_96  c_97  c_98  c_99  \\\n",
       "0  NaN  NaN    2   ...        0     1     0     0     0     0     0     0   \n",
       "1  NaN  NaN    2   ...        0     0     0     0     0     0     0     0   \n",
       "2  NaN  NaN    0   ...        0     0     0     0     0     0     0     0   \n",
       "3  NaN  NaN    1   ...        0     0     0     0     0     0     0     0   \n",
       "4  NaN  NaN    1   ...        0     0     0     0     0     0     0     0   \n",
       "\n",
       "   c_100  c_other  \n",
       "0      0        9  \n",
       "1      0        7  \n",
       "2      0       12  \n",
       "3      0        8  \n",
       "4      0        9  \n",
       "\n",
       "[5 rows x 110 columns]"
      ]
     },
     "execution_count": 251,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv(\"target_event.csv\")\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 252,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1532 entries, 0 to 1531\n",
      "Columns: 110 entries, event_id to c_other\n",
      "dtypes: float64(2), int64(103), object(5)\n",
      "memory usage: 1.3+ MB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可看出每个样本共有110个特征，本次作业要求对活动关键词（count_1, count_2, ..., count_100，count_other属性）做聚类，故只需保留着101维数据即可，将其他的特征全部移除"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 253,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train = data.drop([\"event_id\",\"user_id\",\"start_time\",\"city\",\"state\",\"zip\",\"country\",\"lat\",\"lng\"],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 254,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>c_1</th>\n",
       "      <th>c_2</th>\n",
       "      <th>c_3</th>\n",
       "      <th>c_4</th>\n",
       "      <th>c_5</th>\n",
       "      <th>c_6</th>\n",
       "      <th>c_7</th>\n",
       "      <th>c_8</th>\n",
       "      <th>c_9</th>\n",
       "      <th>c_10</th>\n",
       "      <th>...</th>\n",
       "      <th>c_92</th>\n",
       "      <th>c_93</th>\n",
       "      <th>c_94</th>\n",
       "      <th>c_95</th>\n",
       "      <th>c_96</th>\n",
       "      <th>c_97</th>\n",
       "      <th>c_98</th>\n",
       "      <th>c_99</th>\n",
       "      <th>c_100</th>\n",
       "      <th>c_other</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 101 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   c_1  c_2  c_3  c_4  c_5  c_6  c_7  c_8  c_9  c_10   ...     c_92  c_93  \\\n",
       "0    2    0    2    0    0    0    0    0    0     0   ...        0     1   \n",
       "1    2    0    2    0    0    0    0    0    0     0   ...        0     0   \n",
       "2    0    0    0    0    0    0    0    0    0     0   ...        0     0   \n",
       "3    1    0    2    1    0    0    0    0    0     0   ...        0     0   \n",
       "4    1    1    0    0    0    0    0    2    0     0   ...        0     0   \n",
       "\n",
       "   c_94  c_95  c_96  c_97  c_98  c_99  c_100  c_other  \n",
       "0     0     0     0     0     0     0      0        9  \n",
       "1     0     0     0     0     0     0      0        7  \n",
       "2     0     0     0     0     0     0      0       12  \n",
       "3     0     0     0     0     0     0      0        8  \n",
       "4     0     0     0     0     0     0      0        9  \n",
       "\n",
       "[5 rows x 101 columns]"
      ]
     },
     "execution_count": 254,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 255,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the shape of data: (1532, 101)\n"
     ]
    }
   ],
   "source": [
    "# 输入的特征维数和样本数目\n",
    "print('the shape of data: {}'.format(X_train.shape))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据已准备好，共101维特征，1532个样本"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 直接聚类"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用K-mean算法，此处需要调试超参数K（质心的数目），由于没有y标签，所以无法使用外部评价指标，只能使用内部评价指标Silhouette Coefficient和Calinski-Harabasz Index，这两个评价指标的分数越高，说明聚类效果越好。  \n",
    "\n",
    "这里选用MiniBatchKMeans（K-mean算法变种），采用随机小批量的数据子集减少计算时间，类似于随机梯度下降法。MiniBatchKMeans加快了收敛速度，但在测试集上也降低了聚类的效果，但在实际项目中，降低效果表现并不明显，可能反而因为增加了泛化能力，在实际中得到更好的聚类效果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 256,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 一个参数点（聚类数据为K）的模型\n",
    "def K_cluster_analysis(K, X_train):\n",
    "    start = time.time()\n",
    "    \n",
    "    #print(\"K-means begin with clusters: {}\".format(K));\n",
    "    \n",
    "    #K-means,在训练集上训练\n",
    "    mb_kmeans = MiniBatchKMeans(n_clusters = K)\n",
    "    mb_kmeans.fit(X_train)\n",
    "    \n",
    "    # K值的评估标准\n",
    "    #常见的方法有轮廓系数Silhouette Coefficient和Calinski-Harabasz Index\n",
    "    #这两个分数值越大则聚类效果越好\n",
    "    CH_score_calinski = metrics.calinski_harabaz_score(X_train,mb_kmeans.predict(X_train))\n",
    "    CH_score_silhouett = metrics.silhouette_score(X_train,mb_kmeans.predict(X_train))\n",
    "    \n",
    "    \n",
    "    end = time.time()\n",
    "    print(\"CH_score_calinski: {}, CH_score_silhouett: {},time elaps:{}\".format(CH_score_calinski, CH_score_silhouett, int(end-start)))\n",
    "    \n",
    "    return CH_score_calinski,CH_score_silhouett"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "轮廓系数Silhouette Coefficient的评价原理是计算类内散度和类间散度，如果类内散度越小，类间散度越大，则计算的结果数值越大，也就说明聚类效果越好，取值范围[-1,1]，一般大于0.5表示聚类效果不错  \n",
    "CH索引Calinski-Harabasz Index和轮廓系数原理差不多，只是计算公式不同，在给定K的情况下，使用欧式距离计算类间散度和类内散度，计算速度更快点，也是分值越大越好"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 257,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CH_score_calinski: 3565.9123030743863, CH_score_silhouett: 0.5296773475808788,time elaps:0\n",
      "CH_score_calinski: 2348.641154660084, CH_score_silhouett: 0.252169663017688,time elaps:0\n",
      "CH_score_calinski: 1359.382463028583, CH_score_silhouett: 0.17953294944336143,time elaps:0\n",
      "CH_score_calinski: 1073.1963098834542, CH_score_silhouett: 0.20813930917961881,time elaps:0\n",
      "CH_score_calinski: 1346.308023779811, CH_score_silhouett: 0.16907376224880957,time elaps:0\n",
      "CH_score_calinski: 1197.4102010100305, CH_score_silhouett: 0.11428335250155786,time elaps:1\n",
      "CH_score_calinski: 1184.9930104001899, CH_score_silhouett: 0.1718551781700824,time elaps:1\n",
      "CH_score_calinski: 1056.3171238256, CH_score_silhouett: 0.1676699669778822,time elaps:0\n",
      "CH_score_calinski: 987.6267663686575, CH_score_silhouett: 0.18563989804490405,time elaps:0\n",
      "CH_score_calinski: 875.8979606272376, CH_score_silhouett: 0.18729963341634698,time elaps:1\n"
     ]
    }
   ],
   "source": [
    "# 设置超参数（聚类数目K）搜索范围\n",
    "Ks = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]\n",
    "\n",
    "CH_score_calinski = []\n",
    "CH_score_silhouett = []\n",
    "for K in Ks:\n",
    "    ch_ca, ch_si = K_cluster_analysis(K, X_train)\n",
    "    CH_score_calinski.append(ch_ca)\n",
    "    CH_score_silhouett.append(ch_si)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 258,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a2870c79e8>]"
      ]
     },
     "execution_count": 258,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制不同PCA维数下模型的性能，找到最佳模型／参数（分数最高）\n",
    "plt.plot(Ks, np.array(CH_score_calinski), 'b-')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 259,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a2802e3470>]"
      ]
     },
     "execution_count": 259,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制不同PCA维数下模型的性能，找到最佳模型／参数（分数最高）\n",
    "plt.plot(Ks, np.array(CH_score_silhouett), 'g-')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "K-means聚类方法需要设定分类的数目K，属于超参数，以上选择10~100内的10个K值分别进行聚类，并使用两个内部评价指标对聚类效果进行评价  \n",
    "从以上两个曲线可看出，曲线的走势基本相同，都是随着聚类数目的增加，曲线下降，即聚类效果越来越差，可能是因为该数据集本身就不需要分成这么多类。在K值小于20的区间，两个评价指标分数下降的很快，故应尝试对前面的K值再进行调优，将K值候选范围缩小"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 260,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CH_score_calinski: 1932.9880510154362, CH_score_silhouett: 0.697130077903193,time elaps:0\n",
      "CH_score_calinski: 3096.3450549795075, CH_score_silhouett: 0.6752776073984005,time elaps:0\n",
      "CH_score_calinski: 3477.5985646131608, CH_score_silhouett: 0.6319787316611213,time elaps:0\n",
      "CH_score_calinski: 3794.18897077505, CH_score_silhouett: 0.591289102675195,time elaps:0\n",
      "CH_score_calinski: 4038.2362700138724, CH_score_silhouett: 0.5602413410722774,time elaps:0\n",
      "CH_score_calinski: 4442.277558494651, CH_score_silhouett: 0.537059523558319,time elaps:0\n",
      "CH_score_calinski: 4617.110102433553, CH_score_silhouett: 0.5398157328876557,time elaps:0\n",
      "CH_score_calinski: 4184.131575320639, CH_score_silhouett: 0.4920325611683702,time elaps:0\n",
      "CH_score_calinski: 4307.128959046696, CH_score_silhouett: 0.4624740990957102,time elaps:0\n",
      "CH_score_calinski: 3559.7669660442657, CH_score_silhouett: 0.44555829395767604,time elaps:0\n",
      "CH_score_calinski: 3546.2907931386844, CH_score_silhouett: 0.2866646442985484,time elaps:0\n",
      "CH_score_calinski: 4136.843768246006, CH_score_silhouett: 0.40417460371555686,time elaps:0\n",
      "CH_score_calinski: 2534.6580101176796, CH_score_silhouett: 0.3896134877515875,time elaps:0\n",
      "CH_score_calinski: 2201.2084716355407, CH_score_silhouett: 0.21829029320926674,time elaps:0\n",
      "CH_score_calinski: 3199.2859091709342, CH_score_silhouett: 0.2519271870124777,time elaps:0\n",
      "CH_score_calinski: 3401.6293905015505, CH_score_silhouett: 0.2914165485942942,time elaps:0\n",
      "CH_score_calinski: 3038.1193259967754, CH_score_silhouett: 0.2736180661821162,time elaps:0\n",
      "CH_score_calinski: 2989.565797683322, CH_score_silhouett: 0.26581144023965725,time elaps:0\n"
     ]
    }
   ],
   "source": [
    "Kss = range(2, 20, 1)\n",
    "CH_score_calinski_1 = []\n",
    "CH_score_silhouett_1 = []\n",
    "for K in Kss:\n",
    "    ch_ca, ch_si = K_cluster_analysis(K, X_train)\n",
    "    CH_score_calinski_1.append(ch_ca)\n",
    "    CH_score_silhouett_1.append(ch_si)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 261,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a28320deb8>]"
      ]
     },
     "execution_count": 261,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(Kss, np.array(CH_score_calinski_1), 'b-')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 262,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a284edaa20>]"
      ]
     },
     "execution_count": 262,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(Kss, np.array(CH_score_silhouett_1), 'g-')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图可看出，随着K值的加大，轮廓系数Silhouette Coefficient的分数依旧是不断下降的，但最好的评价分数已经可以达到0.7左右了，出现在第一个值的位置，即聚类最终分为两类的效果最好。  \n",
    "\n",
    "CH索引Calinski-Harabasz Index的分数有点奇怪，在K=2左右，分数非常低，在K=7左右突然升高，之后的走势和轮廓系数类似，我猜测原因可能是数据还是适合分为两类，符合球型高斯，所以轮廓系数在K=2时分数很高，但此时两个簇并不是非常密集的，外围的数据点比较分散，而CH索引在计算时，是使用欧氏距离，类间散度为每一类中心到所有样本中心的距离平方和，类内散度为每一类自己样本的方差和，评价分数约等于类内散度除以类间散度，所以当两个类的中心到所有样本中心距离不变，每个类自己的样本变稀疏分散时就会造成分数变低，而整体上看还是属于两个单独的类"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 先PCA降维，再聚类"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于没有y标签，在做PCA（用较少的主成分得到较多的信息）降维时，没办法直接通过外部评价或实际的分类模型进行参数调优，但可以使用上面的内部评价分数进行调优  \n",
    "\n",
    "原数据有101维，尝试降维至70,80,90,100 以轮廓系数Silhouette Coefficient为评价指标，看看效果如何  \n",
    "上面未进行降维时，聚类效果基本是类别数越少，聚类效果越好，故再此验证的聚类效果也选择K=2~20之间"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 263,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CH_score_calinski: 1935.1396077476873, CH_score_silhouett: 0.6977149132712752,time elaps:0\n",
      "CH_score_calinski: 3075.3440276104516, CH_score_silhouett: 0.6625273550076787,time elaps:0\n",
      "CH_score_calinski: 3710.6514205788826, CH_score_silhouett: 0.6326050778761051,time elaps:0\n",
      "CH_score_calinski: 4013.2455989060713, CH_score_silhouett: 0.5958191560752147,time elaps:0\n",
      "CH_score_calinski: 4488.624432872353, CH_score_silhouett: 0.5976172875960545,time elaps:0\n",
      "CH_score_calinski: 4674.1375774451835, CH_score_silhouett: 0.5570943401621308,time elaps:0\n",
      "CH_score_calinski: 4330.539436900941, CH_score_silhouett: 0.5321816741536269,time elaps:0\n",
      "CH_score_calinski: 4593.788291981996, CH_score_silhouett: 0.5429578557185246,time elaps:0\n",
      "CH_score_calinski: 4205.781220444305, CH_score_silhouett: 0.49282254956711763,time elaps:0\n",
      "CH_score_calinski: 4102.490403461226, CH_score_silhouett: 0.4296944637523147,time elaps:0\n",
      "CH_score_calinski: 2161.320844713968, CH_score_silhouett: 0.2570650561019746,time elaps:0\n",
      "CH_score_calinski: 3876.193585354019, CH_score_silhouett: 0.3141378974476425,time elaps:0\n",
      "CH_score_calinski: 3728.3661698020774, CH_score_silhouett: 0.35737921079756896,time elaps:0\n",
      "CH_score_calinski: 3700.2249319220605, CH_score_silhouett: 0.4183526696068717,time elaps:0\n",
      "CH_score_calinski: 2526.262480235984, CH_score_silhouett: 0.29506826750293924,time elaps:0\n",
      "CH_score_calinski: 3010.217254440239, CH_score_silhouett: 0.22848489437429398,time elaps:0\n",
      "CH_score_calinski: 3678.1782850099275, CH_score_silhouett: 0.38846337163351574,time elaps:0\n",
      "CH_score_calinski: 3162.452710727459, CH_score_silhouett: 0.3135831413493702,time elaps:0\n",
      "CH_score_calinski: 2013.6694096838492, CH_score_silhouett: 0.7441747061207019,time elaps:0\n",
      "CH_score_calinski: 3095.1577829156677, CH_score_silhouett: 0.6763017202730857,time elaps:0\n",
      "CH_score_calinski: 3529.513311194324, CH_score_silhouett: 0.6222816355184415,time elaps:0\n",
      "CH_score_calinski: 3914.353939888753, CH_score_silhouett: 0.5901823474396124,time elaps:0\n",
      "CH_score_calinski: 4390.894579630533, CH_score_silhouett: 0.5952178584348139,time elaps:0\n",
      "CH_score_calinski: 3957.988681751382, CH_score_silhouett: 0.5222739223700037,time elaps:0\n",
      "CH_score_calinski: 4015.0934571738057, CH_score_silhouett: 0.49113120199463667,time elaps:0\n",
      "CH_score_calinski: 4256.701169355334, CH_score_silhouett: 0.5066635749491023,time elaps:0\n",
      "CH_score_calinski: 3387.6245000162467, CH_score_silhouett: 0.36481108113710037,time elaps:0\n",
      "CH_score_calinski: 4086.295578896619, CH_score_silhouett: 0.4340087406519619,time elaps:0\n",
      "CH_score_calinski: 3311.3030055311497, CH_score_silhouett: 0.427710278291926,time elaps:0\n",
      "CH_score_calinski: 3614.593753130864, CH_score_silhouett: 0.4500933837156417,time elaps:0\n",
      "CH_score_calinski: 3626.7651037495352, CH_score_silhouett: 0.4341002739954688,time elaps:0\n",
      "CH_score_calinski: 3695.243223936301, CH_score_silhouett: 0.5151195975533972,time elaps:0\n",
      "CH_score_calinski: 2232.106813183629, CH_score_silhouett: 0.18445213993770698,time elaps:0\n",
      "CH_score_calinski: 2505.8936736689143, CH_score_silhouett: 0.36801745297142463,time elaps:0\n",
      "CH_score_calinski: 1504.235280347181, CH_score_silhouett: 0.2225725618971324,time elaps:0\n",
      "CH_score_calinski: 2868.5009877159546, CH_score_silhouett: 0.2628585409088338,time elaps:0\n",
      "CH_score_calinski: 1959.1282917325887, CH_score_silhouett: 0.7039752279209532,time elaps:0\n",
      "CH_score_calinski: 3064.0547363181, CH_score_silhouett: 0.6792108036635902,time elaps:0\n",
      "CH_score_calinski: 3580.8647574857537, CH_score_silhouett: 0.6127472132567108,time elaps:0\n",
      "CH_score_calinski: 3167.6827490168994, CH_score_silhouett: 0.572494912940002,time elaps:0\n",
      "CH_score_calinski: 3746.4470128932558, CH_score_silhouett: 0.5487852025152893,time elaps:0\n",
      "CH_score_calinski: 4567.863505011092, CH_score_silhouett: 0.5500006148312545,time elaps:0\n",
      "CH_score_calinski: 3309.7939834221984, CH_score_silhouett: 0.30953022564536126,time elaps:0\n",
      "CH_score_calinski: 4383.864105867905, CH_score_silhouett: 0.5207703582326703,time elaps:0\n",
      "CH_score_calinski: 4126.1686917894485, CH_score_silhouett: 0.4899888659882988,time elaps:0\n",
      "CH_score_calinski: 3052.9774324504037, CH_score_silhouett: 0.30750028272028823,time elaps:0\n",
      "CH_score_calinski: 3379.199712129573, CH_score_silhouett: 0.45235637168881787,time elaps:0\n",
      "CH_score_calinski: 4005.581443460126, CH_score_silhouett: 0.417989133203365,time elaps:0\n",
      "CH_score_calinski: 2788.781203198536, CH_score_silhouett: 0.34385134240198123,time elaps:0\n",
      "CH_score_calinski: 2658.581693878442, CH_score_silhouett: 0.33366244618199237,time elaps:0\n",
      "CH_score_calinski: 1791.0066401434144, CH_score_silhouett: 0.18126620221781642,time elaps:0\n",
      "CH_score_calinski: 3287.6778645847744, CH_score_silhouett: 0.2655774401069622,time elaps:0\n",
      "CH_score_calinski: 1458.5036229964178, CH_score_silhouett: 0.17105958464410084,time elaps:0\n",
      "CH_score_calinski: 3088.9863137714256, CH_score_silhouett: 0.2650014604285442,time elaps:0\n",
      "CH_score_calinski: 2012.426297785085, CH_score_silhouett: 0.7439618913925297,time elaps:0\n",
      "CH_score_calinski: 3027.6829886128726, CH_score_silhouett: 0.6533338914712661,time elaps:0\n",
      "CH_score_calinski: 3658.734919826419, CH_score_silhouett: 0.6380994616750602,time elaps:0\n",
      "CH_score_calinski: 3986.847839106471, CH_score_silhouett: 0.5926899660017655,time elaps:0\n",
      "CH_score_calinski: 3863.4917781143818, CH_score_silhouett: 0.5506038813084002,time elaps:0\n",
      "CH_score_calinski: 3790.6974188233835, CH_score_silhouett: 0.5329709472519748,time elaps:0\n",
      "CH_score_calinski: 4673.851671489924, CH_score_silhouett: 0.5480886681740457,time elaps:0\n",
      "CH_score_calinski: 4478.177823787814, CH_score_silhouett: 0.5376761739596819,time elaps:0\n",
      "CH_score_calinski: 3788.6414151249664, CH_score_silhouett: 0.3951585227120271,time elaps:0\n",
      "CH_score_calinski: 2586.540678117867, CH_score_silhouett: 0.418727580694162,time elaps:0\n",
      "CH_score_calinski: 3729.247737235438, CH_score_silhouett: 0.45664357303127084,time elaps:0\n",
      "CH_score_calinski: 3457.34254453771, CH_score_silhouett: 0.28093296196644363,time elaps:0\n",
      "CH_score_calinski: 3475.5280661657634, CH_score_silhouett: 0.32323613466074214,time elaps:0\n",
      "CH_score_calinski: 2556.2940753919697, CH_score_silhouett: 0.2851925808180091,time elaps:0\n",
      "CH_score_calinski: 1947.5260188153272, CH_score_silhouett: 0.3621499142687685,time elaps:0\n",
      "CH_score_calinski: 3050.933758066252, CH_score_silhouett: 0.3297546565902393,time elaps:0\n",
      "CH_score_calinski: 3188.413907806586, CH_score_silhouett: 0.24048809996757117,time elaps:0\n",
      "CH_score_calinski: 2860.176838208891, CH_score_silhouett: 0.4260434105051163,time elaps:0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_comp = range(70, 101, 10)\n",
    "K_pca = range(2, 20, 1)\n",
    "\n",
    "CH_score_silhouett_pca=[]\n",
    "\n",
    "for n in n_comp:\n",
    "    pca = PCA(n_components=n)\n",
    "    #print(\"PCA begin with n_components: {}\".format(n));\n",
    "    pca.fit(X_train)\n",
    "    \n",
    "    X_train_pca = pca.transform(X_train)\n",
    "    \n",
    "    for K_0 in K_pca:\n",
    "        ch_ca, ch_si = K_cluster_analysis(K_0, X_train_pca)\n",
    "        #CH_score_calinski_pca.append(ch_ca)\n",
    "        CH_score_silhouett_pca.append(ch_si)\n",
    "    \n",
    "    plt.plot(K_pca,np.array(CH_score_silhouett_pca),label=\"n_components=%d\"%(n,))\n",
    "    CH_score_silhouett_pca.clear()\n",
    "    \n",
    "leg = plt.legend(loc='best', ncol=2, mode=\"expand\", shadow=True, fancybox=True)\n",
    "leg.get_frame().set_alpha(0.5)\n",
    "plt.show() \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上面的结果可发现，进行PCA降维后，曲线和未进行降维之前的走势差不多，但降维为80左右时，最好的分数可达到0.75左右，也是出现在2个分类的时候，PCA可能改善了聚类效果，原因一方面可能是因为原数据101维中有些特征相关性比较强，降维后得到的数据更有有效，另一方面可能是因为K-means对球型高斯分布的聚类效果比较好，不适合扁长型的数据分布聚类，也不适合分布散度不同、类别样本不均衡的聚类，而PCA降维可能使样本的分布更加符合球型高斯分布，故得到了更好的效果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "发现相同的代码，重复运行会出现不同的结果，有的聚类效果好点，有的差点，我感觉是因为K-means本来就不能保证达到全局最优解，因为聚类效果除了和K值有关，另外也跟给定质心的初值有关，每次运行代码，都是随机给定质心，可能给的质心会造成聚类效果特别差的情况，也有可能很好"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "小结  \n",
    "PCA学习特征之间的相关性  \n",
    "聚类学习样本之间的相关性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
